/**
 * Copyright (c) 2015 Baidu. All Rights Reserved.
 *
 * @file 用于从.JSON文件中获取数据
 * @author yuanguozheng
 */
var jsonfile = require('jsonfile');
var urls = require('./urls');

/**
 * 从文件中获取JSON对象
 *
 * @param {string} file 文件路径
 * @return {Object} JSON对象
 */
function getJson(file) {
    return jsonfile.readFileSync(file);
}

/**
 * 根据类型映射配置文件获取类型
 *
 * @param {string} lang 语言（java或oc）
 * @param {string} type 原始类型
 * @return {string} 对应的类型
 */
function getTypeMapping(lang, type) {
    var file = urls.config('mapping.json');
    var map = getJson(file);
    if (map[type] && map[type][lang]) {
        return map[type][lang];
    } else {
        var uniType;
        switch (lang) {
            case 'java':
                uniType = 'Object';
                break;
            case 'oc':
                uniType = 'NSObject *';
                break;
            case 'cs':
                uniType = 'object';
                break;
            default:
                uniType = 'Object';
                break;
        }
        return uniType;
    }
}

/**
 * 获取项目配置中的具体值
 *
 * @param {string} key 键
 * @return {string} 值
 */
function getProjectConfig(key) {
    var file = urls.config('project');
    var map = getJson(file);
    if (map[key]) {
        return map[key];
    }
    return null;
}


/**
 * 获取OC中属性的Setter语义
 *
 * @return {Object} setters
 */
function getOcSetter() {
    var file = urls.config('setter');
    return getJson(file);
}

/**
 * 获取批量请求规则
 *
 * @return {Object} 规则
 */
function getRequestRules() {
    var file = urls.config('request_rules');
    return getJson(file);
}

module.exports = {
    typeMapping: getTypeMapping,
    projectConfig: getProjectConfig,
    setters: getOcSetter,
    requestRules: getRequestRules
};